package com.example.chamberlainserver.Service;

import com.example.chamberlainserver.Entry.UserAvailability;
import com.example.chamberlainserver.dto.PageResult;
import com.example.chamberlainserver.dto.TimeSlotResponseDTO;

import java.util.List;
import java.util.Map;

/**
 * 用户可用时间服务接口
 */
public interface UserAvailabilityService {
    /**
     * 添加用户可用时间
     */
    boolean addUserAvailability(UserAvailability userAvailability);
    
    /**
     * 批量添加用户可用时间
     */
    boolean batchAddUserAvailability(List<UserAvailability> userAvailabilityList);
    
    /**
     * 根据ID查询用户可用时间
     */
    UserAvailability getUserAvailabilityById(String id);
    
    /**
     * 根据用户ID查询可用时间列表
     */
    List<UserAvailability> getUserAvailabilityByUserId(Integer userId);
    
    /**
     * 根据星期几查询可用用户
     */
    List<UserAvailability> getAvailableUsersByDayOfWeek(Integer dayOfWeek);
    
    /**
     * 更新用户可用时间
     */
    boolean updateUserAvailability(UserAvailability userAvailability);
    
    /**
     * 删除用户可用时间
     */
    boolean deleteUserAvailability(String id);
    
    /**
     * 根据用户ID删除所有可用时间
     */
    boolean deleteUserAvailabilityByUserId(Integer userId);
    
    /**
     * 分页查询用户可用时间列表
     */
    PageResult<UserAvailability> getPagedUserAvailabilityList(Map<String, Object> params);
    
    /**
     * 更新用户的周可用时间
     */
    boolean updateUserWeeklyAvailability(Integer userId, List<UserAvailability> weeklyAvailability);
    
    /**
     * 根据用户ID获取简化的时间段数据
     */
    TimeSlotResponseDTO getUserTimeSlots(Integer userId);
}